package com.speily.lock.annotation;

import java.lang.annotation.*;
import java.util.concurrent.TimeUnit;

/**
 * <p>
 * 限流注解
 * </p>
 *
 * @author SPL
 * @since 2019/12/31 14:47
 */
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface RateLimiter {

    /*
    * key: cout /timeout timeUnit
    * eg: test: 10/1minute (key为test的限流器每分钟最多允许10次)
    * */

    long DEFAULT_REQUEST = 10;

    /**
     * count 指定时间内请求数
     */
    long count() default DEFAULT_REQUEST;

    /**
     * 限流key
     */
    String key() default "";

    /**
     * 超时时间单位，默认 分钟
     */
    TimeUnit timeUnit() default TimeUnit.MINUTES;

    /**
     * 超时时长，默认1分钟
     */
    long timeout() default 1;

}
